Міністерство освіти і науки молоді та спортуУкраїни
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Розрахункова-графічна робота
з дисципліни об’єктна орієнтоване програмування
РОЗРОБКА ДІАЛОГОВИХ ПРОГРАМ ЗАСОБАМИ MFC
Мета: Оволодіти навиками розробки програм з графічними діалоговими інтерфейсами з використанням бібліотеки класів MFC.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Концепція роботи windows програм
Програма, що написана мовою С/С++, з консольним інтерфейсом працює від початку функції main до її кінця. Для здійснення операцій вводу/виводу програма викликає функції вводу/виводу операційної системи (ОС). ОС не викликає прикладну програму. Windows програма з віконним інтерфейсом працює навпаки. Програма тільки запускається операційною системою і все. Далі програма нічого не робить, а чекає поки не отримає повідомлення від ОС, яке потім буде опрацьовуватися. Повідомлення – це сигнал про те, що відбулася деяка подія. Будь-яка подія супроводжується повідомленнями, що надсилаються або конкретному вікну, кільком вікнам, чи всім вікнам одразу. Деякі події можуть породити ще кілька подій, наприклад створення вікна супроводжується його перемальовуванням. Прикладами події є переміщення курсору мишки, натискання кнопки, тощо.
На відміну від звичайних С/С++ програм, де операції в програмі виконувалися лінійно, в Windows програмах виконується опрацювання повідомлень, які з’являються в довільному порядку, тобто неочікувано (асинхронно). Цим Windows програма схожа на обробник переривань.
Повідомлення мають унікальний номер і часто мають символьні мнемонічні позначення, наприклад WM_PAINT замість 0x000F, і два числові параметри. Список повідомлень є у файлі winuser.h. Сюди можна додати свої повідомлення з унікальними номерами. М
Повідомлення передається програмі від ОС через спеціальну функцію Windows. Після чого вони надходять в чергу повідомлень програми, яка об’являється наступним макросом в класі діалогу: DECLARE_MESSAGE_MAP(). При надходжені повідомлення з черги на обробку відбувається пошук його номера в карті повідомлень. При наявності номера повідомлення в карті повідомлень відбувається виклик зв’язаного з повідомленням обробника. Повідомлення, що відслідковуються і мають свої нестандартні обробники заносяться між макросами BEGIN_MESSAGE_MAP і END_MESSAGE_MAP.
Макрос обробника повідомлення має наступну структуру: тип повідомлення, наприклад ON_BN_CLICKED, ON_COMMAND,....; номер повідомлення; назва обробника події.
Наприклад:
BEGIN_MESSAGE_MAP(C***App, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CLogin, CDialog)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
Події можна генерувати вручну методами SendMessage – синхронний метод (чекає поки повідомлення не буде опрацьоване), PostMessage – асинхронний метод (не чекає на опрацювання повідомлення, а продовжує виконання програми).
Структура віконної діалогової MFC програми
Бібліотека Microsoft Foundation Classes (MFC) дає можливість розробляти GUI-застосунки для Microsoft Windows на мові C++ з використанням багатого набору бібліотечних класів. Велика частина MFC є відносно тонким об'єктно-орієнтованим шаром над Windows API. Це рішення, з одного боку, підвищує продуктивність, але, з другого боку, успадковує всі недоліки дизайну Windows API і перешкоджає перенесенню програм на інші платформи.
Типова діалогова програма, що написана з використанням бібліотеки класів MFC складається з двох основних класів: класу C***App і класу C***Dlg, де замість зірочок по замовчуванню мітиться назва проекту.
Клас C***App містить метод InitInstance(), з якого починається виконання програми і створення об’єкту програми theApp. В функції InitInstance() ініціюється черга повідомлень, створюється об’єкт діалогу, до нього приєднується вікно діалогу і діалог відображається на екрані. Початково діалог містить 2 кнопки “OK” і “Cancel”. Кожна з них м...